package br.gov.dataprev.treinamento.ejb.controller;

import java.math.BigDecimal;
import java.util.Date;

import javax.annotation.ManagedBean;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

import br.gov.dataprev.treinamento.ejb.excecao.ExcecaoValidacao;
import br.gov.dataprev.treinamento.ejb.modelo.Cliente;
import br.gov.dataprev.treinamento.ejb.modelo.Endereco;
import br.gov.dataprev.treinamento.ejb.modelo.FormaPagamento;
import br.gov.dataprev.treinamento.ejb.modelo.ItemPedido;
import br.gov.dataprev.treinamento.ejb.modelo.Pedido;
import br.gov.dataprev.treinamento.ejb.modelo.PessoaFisica;
import br.gov.dataprev.treinamento.ejb.modelo.PessoaJuridica;
import br.gov.dataprev.treinamento.ejb.modelo.Produto;
import br.gov.dataprev.treinamento.ejb.modelo.Sexo;
import br.gov.dataprev.treinamento.ejb.modelo.SituacaoPedido;
import br.gov.dataprev.treinamento.ejb.service.local.FreteService;
import br.gov.dataprev.treinamento.ejb.service.remote.ClienteServiceRemote;
import br.gov.dataprev.treinamento.ejb.service.remote.PedidoServiceRemote;
import br.gov.dataprev.treinamento.ejb.service.remote.ProdutoServiceRemote;

@Named
@ManagedBean
@RequestScoped
public class Teste {
	
	private PessoaFisica pf;
	
	private PessoaJuridica pj;
	
	private Produto p1;
	
	private Produto p2;

	private Pedido pedido;
	
	@EJB
	private ClienteServiceRemote clienteService;
	
	@EJB
	private ProdutoServiceRemote produtoService;
	
	@EJB
	private PedidoServiceRemote pedidoServiceImpl;
	
	@PostConstruct
	public void init() {

		pf = new PessoaFisica();
		pf.setCpf("12345678910");
		pf.setDataCadastro(new Date(90, 0, 1));
		pf.setDataNascimento(new Date(82,6,27));
		pf.setEmail("joao.silva@gmail.com");
		pf.setNome("JOAO DA SILVA");
		pf.setSexo(Sexo.MASCULINO);
		
		Endereco enderecoPf = new Endereco();
		enderecoPf.setLogradouro("AV BRASIL");
		enderecoPf.setNumero("171");
		enderecoPf.setComplemento("AP 101");
		enderecoPf.setCep("12345-678");
		enderecoPf.setBairro("DIVINO");
		enderecoPf.setCidade("RIO DE JANEIRO");
		enderecoPf.setUf("RJ");
		pf.setEndereco(enderecoPf);
		
		pj = new PessoaJuridica();
		pj.setCnpj("12345678910");
		pj.setDataCadastro(new Date());
		pj.setEmail("sac@acme.com");
		pj.setRazaoSocial("ACME");
		
		Endereco enderecoPj = new Endereco();
		enderecoPj.setLogradouro("AV BRASIL");
		enderecoPj.setNumero("171");
		enderecoPj.setComplemento("AP 101");
		enderecoPj.setCep("12345-678");
		enderecoPj.setBairro("DIVINO");
		enderecoPj.setCidade("RIO DE JANEIRO");
		enderecoPj.setUf("RJ");
		pj.setEndereco(enderecoPj);
		
		p1 = new Produto();
		p1.setNome("Xoom 2 8.2\"");
		p1.setFornecedor("Motorola");
		p1.setDescricao("Tablet Motorola Xoom 2 com Android 3.2 Wi-Fi e 3G Tela 8,2\" Touchscreen e Memória Interna 32GB");
		p1.setDestaque(true);
		p1.setValorUnitario(new BigDecimal(1399.99D));
		p1.setValorPromocao(new BigDecimal(989.1));
		
		p2 = new Produto();
		p2.setNome("Dock multimídia para Tablets Motorola");
		p2.setFornecedor("Motorola");
		p2.setDescricao("Doca Multimídia com 3 saídas USB e 1 saída micro HDMI para Tablets (Xoom 2 Media Edition e Xoom 2) - Motorola");
		p2.setDestaque(true);
		p2.setValorUnitario(new BigDecimal(369D));
		
		
		pedido = new Pedido();
		pedido.setCliente(pf);
		pedido.setDataCadastro(new Date());
		pedido.setFormaPagamento(FormaPagamento.CARTAO_MASTER);
		pedido.setSituacao(SituacaoPedido.AGUARDANDO_CONFIRMACAO_PGTO);
		
		ItemPedido ip1 = new ItemPedido();
		ip1.setProduto(p1);
		ip1.setQuantidade(2);
		pedido.addItem(ip1);
		
		ItemPedido ip2 = new ItemPedido();
		ip2.setProduto(p2);
		ip2.setQuantidade(1);
		pedido.addItem(ip2);
		
	}
	
	
	
	public PessoaFisica getPf() {
		return pf;
	}



	public void setPf(PessoaFisica pf) {
		this.pf = pf;
	}



	public PessoaJuridica getPj() {
		return pj;
	}



	public void setPj(PessoaJuridica pj) {
		this.pj = pj;
	}



	public Produto getP1() {
		return p1;
	}



	public void setP1(Produto p1) {
		this.p1 = p1;
	}



	public Produto getP2() {
		return p2;
	}



	public void setP2(Produto p2) {
		this.p2 = p2;
	}



	public Pedido getPedido() {
		return pedido;
	}

	public void setPedido(Pedido pedido) {
		this.pedido = pedido;
	}
	
	public void incluirPessoaFisica() throws ExcecaoValidacao {
		pf = (PessoaFisica)clienteService.incluir(pf);
	}
	
	public void incluirPessoaJuridica() throws ExcecaoValidacao {
		pj = (PessoaJuridica)clienteService.incluir(pj);
	}
	
}
